<?php

class UserKDomain extends KDomain
{
	
	//Besagt, dass ein Benutzer für sich diese Wissenskategorie ausgewählt hat 
	protected $selected = FALSE;
	protected $tags = array();
	protected $user = NULL;
	
	
  public function GetTags()
  {
    return $this->$tags;
  }
  
  
  public function IsSelected()
  {
  	return $this->selected;
  }
  
  
  public function GetUser()
  {
    return $this->user;
  }
  
  
  
  public function __construct($user = NULL, $kDomainId=0, $parent = NULL)
  {
    
    $this->user = $user;
    $this->id = $kDomainId;
    $this->parent = $parent;
    
    //Wenn kein user-Objekt zur Bestimmung der userID übergeben wurde, wird geschaut ob es in
    //dem parent-Objekt einen user gibt
    if (is_null($this->user) && !is_null($this->parent))
    {
      $this->user = $this->parent->GetUser();
    }
    
    parent::__construct($kDomainId);
    
    //Nur wenn ein Benutzerobjekt existiert, kann man die Nutzerspezifischen Wissenskategorien
    //aus der Datenbank laden 
  	if (!is_null($this->user))
  	{
	  //TODO: Das sollte erst aufgerufen werden, wenn alle UserKDomain-Objekte erzeugt wurden
	  $this->setSelection($this->user->GetId());
  	}
  }
  
  
  
  //Nimmt die von KDomain geladene Struktur und lädt aus der Datenbank, ob der User 
  //sich diese zugeordnet hat
  protected function setSelection($userId)
  {
    //Zuerst werden alle dem Benutzer zugeordneten Wissenskategorien aus der DB gelesen
    //Dabei wird angenommen, dass die Datenbank konsistent ist
  	$db = DB::getMysqli();
  	$queryStr = 'SELECT
  	               *
  	             FROM
  	               user_kdomains
  	             WHERE
  	               user = '.$userId.';';
  	$result = $db->query($queryStr);
    while ($row = $result->fetch_assoc())
    {
      //Anschließend werden die zugeordneten Wissenskategorien in den existierenden Kat. gesucht
      //Hier könnte ein Fehler audtreten, wenn diw Wissenskat. inzwischen gelöscht wurde
      $search = $this->SearchChild($row['kdomain']);
      if (is_null($search))
      {
        //TODO: Fehlerverwaltung?
        return;
      }
      //Dann wird diese noch ausgewählt um zu verdeutlich, dass der Benutzer sie sich zugeordnet hat
      $search->Select();
    }
    $result->close();
  }
  
  
  
  //Überschrieben Methode um Polymorhipsmus zu gewährleistens
  public function AddChild($user, $childId, $parent = NULL)
  {
    array_push($this->childs, new UserKDomain($user, $childId, $parent));
  }
  
  
  
  //
  public function Select()
  {
  	$this->selected = TRUE;
  }
  
  
  
  public function Deselect()
  {
  	$this->selected = FALSE;
  }
  
  
  
  public function AddTag($tag)
  {
    $this->tags[] = $tag;
  }
  
  
  
  //Geht das tags-array durch und entfernt alle tags aus der Klasse und anschlie�end aus der Datenbank
  public function RemoveTag($tag)
  {
    $foundPos = array();
    foreach ($this->tags as $key => $currTag)
    {
      if ($tag == $currTag)
      {
        $foundPos[] = $key;
      }
    }
    foreach ($foundPos as $key)
    {
      unset($this->tags[$key]);
      //DB::RemoveTag()
    }
  }
  
  
  
}

?>